#!/bin/bash

# 卡系统测试平台部署指南

本文档提供卡系统测试平台的完整部署步骤，包括本地准备、文件上传和远程服务器配置。

## 1. 部署准备

### 1.1 确认服务器信息

- 服务器 IP: 222.128.36.213
- SSH 端口: 6022
- 用户名: pyapp
- 密码: 请使用您的密码

### 1.2 确认本地环境

- 确保已安装 Node.js 和 npm
- 确保已安装 Python 3.x

## 2. 前端部署

### 2.1 构建并上传前端代码

运行前端部署脚本:

```bash
# 给脚本添加执行权限
chmod +x deploy_frontend.sh

# 执行部署脚本
./deploy_frontend.sh
```

此脚本会:

- 在本地构建前端代码
- 创建远程目录
- 上传前端构建文件到服务器的 `/home/pyapp/www/cardsys_test` 目录

> 注意: 首次运行时会提示输入 SSH 密码，可能需要输入多次。

## 3. Nginx 配置

### 3.1 上传并应用 Nginx 配置

运行 Nginx 配置上传脚本:

```bash
# 给脚本添加执行权限
chmod +x upload_nginx_config.sh

# 执行配置脚本
./upload_nginx_config.sh
```

此脚本会:

- 创建 Nginx 配置文件
- 上传配置到服务器的 `/home/pyapp/nginx/conf/` 目录
- 自动将配置文件包含到 Nginx 主配置的 http 块中
- 测试配置并重启 Nginx 服务

> 注意: 脚本会自动处理配置文件的正确位置，确保 server 指令在 http 块内部。

## 4. 后端部署

### 4.1 上传后端文件

```bash
# 上传后端文件到服务器
scp -P 6022 -r backend/* pyapp@222.128.36.213:/home/pyapp/workspace/cardsysTest/backend/
```

### 4.2 登录服务器并配置后端

```bash
# 登录服务器
ssh -p 6022 pyapp@222.128.36.213
```

登录后执行以下操作:

```bash
# 进入项目目录
cd /home/pyapp/workspace/cardsysTest/backend

# 创建Python虚拟环境
python -m venv venv

# 激活虚拟环境
source venv/bin/activate

# 安装依赖
pip install -r requirements.txt

# 给脚本添加执行权限
chmod +x start_service.sh stop_service.sh health_check.sh

# 启动后端服务
./start_service.sh
```

## 5. 服务管理

登录服务器后，可以使用以下命令管理服务:

### 5.1 检查服务状态

```bash
cd /home/pyapp/workspace/cardsysTest/backend
./health_check.sh
```

### 5.2 停止服务

```bash
cd /home/pyapp/workspace/cardsysTest/backend
./stop_service.sh
```

### 5.3 重启服务

```bash
cd /home/pyapp/workspace/cardsysTest/backend
./stop_service.sh
./start_service.sh
```

## 6. 访问应用

部署完成后，可通过以下地址访问应用:

```
http://222.128.36.213:8800
```

## 7. 故障排查

### 7.1 前端无法访问

- 检查 Nginx 是否正常运行: `/home/pyapp/nginx/sbin/nginx -t`
- 重启 Nginx: `/home/pyapp/nginx/sbin/nginx -s reload`
- 检查前端文件是否正确上传: `ls -la /home/pyapp/www/cardsys_test`
- 检查 Nginx 配置是否正确包含: `grep -n "include.*nginx_cardsys_test.conf" /home/pyapp/nginx/conf/nginx.conf`

### 7.2 后端 API 无法访问

- 检查后端服务状态: `./health_check.sh`
- 查看日志文件: `cat logs/uvicorn.log` 或 `cat logs/access.log`
- 确认端口是否正确(8116): `netstat -tulpn | grep 8116`

### 7.3 设置 SSH 密钥认证(避免多次输入密码)

在本地执行:

```bash
# 生成SSH密钥对
ssh-keygen -t rsa

# 上传公钥到服务器
ssh-copy-id -p 6022 pyapp@222.128.36.213
```

完成后再次运行部署脚本，将不再需要输入密码。
